package com.sicheng.lc.lc笔试.美团篇;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/4/30 10:33
 */
public class 完美凌型 {
    /**
     * 时间限制： 3000MS
     * 内存限制： 589824KB
     * 题目描述：
     * 菱形是一类非常优美的图形：
     * 其对边对称，四条边长度相等。
     * 例如正方形就是一类特殊的菱形。
     * 对于图论而言，菱形图是指一个无向图形成的环，满足点数大于等于4，
     * 其中可以找到四个不相同的点a,b,c,d，使得a→b，b→c，c→d，d→a的距离都相等。
     * <p>
     * 小美刚刚学完图论
     * 她随手造了一张n个点m条无向边的图（不含重边和自环，保证连通，即任意两个点都互相可达），
     * 她想知道这张图是不是菱形图。（本题目中，我们默认两点之间的距离为1）
     * <p>
     * 输入描述
     * 第一行一个正整数T，表示有T组数据。
     * 对于每一组数据，第一行两个正整数n，m，表示无向图的点数和边数；
     * 第二行m个正整数ui；第三行m个正整数vi，表示ui与vi之间有一条无向边。
     * 数据保证无重边和自环且图连通。数字间两两有空格隔开。
     * 4≤n≤m≤104 ，1≤ui,vi≤n ，1≤T≤8
     * 输出描述
     * 对于每一组数据，如果其是菱形图，输出一行Yes；否则，输出一行No。
     * 样例输入
     * 3
     * 8 8
     * 1 3 7 8 5 6 2 4
     * 3 7 8 5 6 2 4 1
     * 9 9
     * 1 3 7 8 5 6 2 4 3
     * 3 7 8 5 6 2 4 1 9
     * 7 7
     * 1 5 6 7 3 4 2
     * 5 6 7 3 4 2 1
     * <p>
     * 样例输出
     * Yes
     * No
     * No
     * <p>
     * 提示
     * 第一组样例如图：
     * 不难发现可以选择1,2,5,7四个点，距离都为2。并且整个图是一个环。
     * 第二组样例如图：
     * 整个图不是一个环。
     * 第三组样例如图：
     * 整个图是一个环，但是找不到满足条件的这样四个点。
     * 规则
     */
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        while (n-- > 0) {
            int p = scanner.nextInt();
            int l = scanner.nextInt();
            int[][] ints = new int[p][2];
            int[] pa = new int[p + 1];
            for (int i = 0; i < p; i++) {
                ints[i][0] = scanner.nextInt();
                pa[ints[i][0]]++;
            }
            for (int i = 0; i < p; i++) {
                ints[i][1] = scanner.nextInt();
                pa[ints[i][1]]++;
            }
            if (p < 4 || p % 4 != 0 || p != l) {
                System.out.println("No");
                continue;
            }
            int x = p / 4;
            boolean flag = true;
            for (int i = 1; i < pa.length; i++) {
                if (pa[i] != x || ints[i - 1][0] == ints[i - 1][1]) {
                    flag = false;
                    System.out.println("No");
                    break;
                }
            }
            if (!flag)
                continue;
            int start = ints[0][0];
            int next = ints[0][1];
            int count = 1;
            Arrays.sort(ints, Comparator.comparingInt(e -> e[0]));
            //绕一圈能回到起点并且计数器是所有点的个数
            while (next != start) {
                count++;
                next = ints[next - 1][1];
            }
            if (count == p)
                System.out.println("Yes");
            else
                System.out.println("No");
        }
    }
}
